Quotas & Limits
This page explains how rate limiting and quota enforcement work for the Safe Infrastructure API.
For authentication setup instructions and usage examples, see API Keys & Authentication.
Plans and limits
One API unit equals 1 HTTP request to any Safe Infrastructure endpoint.
| Plan | Price | Monthly quota | Requests per second |
|---|---|---|---|
| Unauthenticated | – | 5,000 | 2 |
| Builder | Free | 50,000 | 5 |
| Growth | €199 / month | 1,000,000 | 15 |
| Scale | From €499 / month | 3,000,000 | 50 |
See Safe API plans (opens in a new tab) for the full comparison. To subscribe or upgrade, log in to the developer dashboard (opens in a new tab).
Response headers
Every authenticated response carries these headers:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Monthly quota of your plan. |
X-RateLimit-Remaining | Requests left in the current window. |
X-RateLimit-Reset | Seconds until the window resets. Not a timestamp. |
X-Consumer-Id | Your account identifier. |
X-Consumer-RPS | Requests per second allowed for your account. |
X-RateLimit-Plan | Your plan: builder, growth or scale. |
X-RateLimit-Warning | Present from 80% of the quota used: <N>% of monthly quota used. Plans: https://safe.global/api#plans. |
Unauthenticated responses carry none of the plan headers.
Example response:
_10HTTP/1.1 200 OK_10X-RateLimit-Limit: 50000_10X-RateLimit-Remaining: 9500_10X-RateLimit-Reset: 1209600_10X-Consumer-Id: 1a2b3c4d_10X-Consumer-RPS: 5_10X-RateLimit-Plan: builder_10X-RateLimit-Warning: 81% of monthly quota used. Plans: https://safe.global/api#plans
Quota window
The monthly quota is a 30-day window that starts at your account's first request, not a calendar month or billing date. Changing your plan starts a new window.
Enforcement is applied at the account level, not per API key:
- All API keys under an account share the same quota and requests-per-second allowance.
- Creating multiple API keys does not increase your limits.
Anti-circumvention: Creating multiple accounts to circumvent rate limits or quotas violates the Safe Infrastructure terms of service. Accounts engaging in this behavior may be suspended.
429 responses
When a limit is reached, the API returns HTTP 429 Too Many Requests. The body is always {"error_msg": "..."}. This field name is kept for existing clients.
Monthly quota reached
Returned once the account has used its monthly quota. The message names your plan, the reset date and how to upgrade.
Builder:
_10{_10 "error_msg": "The monthly quota of 50000 requests on the Builder plan is used. It resets on 15 Nov 2026. Upgrade to the Growth plan at https://developer.safe.global/api-subscriptions, or please book a call on <booking-link>."_10}
Growth:
_10{_10 "error_msg": "The monthly quota of 1000000 requests on the Growth plan is used. It resets on 15 Nov 2026. Upgrade to the Scale plan at https://developer.safe.global/api-subscriptions, or please book a call on <booking-link>."_10}
Scale:
_10{_10 "error_msg": "The monthly quota of 3000000 requests on the Scale plan is used. It resets on 15 Nov 2026. For a higher limit, please book a call on <booking-link>."_10}
Per-second limit reached
Returned when the account sends more requests per second than its plan allows. The quota is not affected.
_10{_10 "error_msg": "This account is limited to 5 requests per second on the Builder plan. Retry after 1 second."_10}
Without an API key
Returned when an unauthenticated request exceeds the unauthenticated limits.
_10{_10 "error_msg": "Requests without an API key have a lower limit. Create a free Builder account for 50,000 requests per month and usage reporting: https://developer.safe.global/"_10}
Handling 429 responses
- Rejected requests still count against your quota. Retrying in a tight loop only burns it faster.
- Monthly quota 429: stop sending requests until
X-RateLimit-Resetseconds have passed, or upgrade your plan (opens in a new tab). - Per-second 429: retry after one second.
- Before you hit 429: watch
X-RateLimit-Warning. It appears from 80% of your quota, which leaves time to upgrade without an outage.